传送门
%%%Newuser,直接秒掉了
一句话题意:割掉一些边使得S,T之间不连通且S->T的路径上仅有一条割边
考试题
首先看题面和数据范围,就可以知道跟最小割有关。
普通的最小割可以实现前一半,那么如何处理后一半呢?
先放一张样例
直接跑最小割答案是2,即切掉1->3,2->4
但我们发现,那S->2->4->1->3->T这条路径上就有两条割边了
那么想让这种情况不成立,即使得这个割不是个割==>使得S,T连通
我们可以连一条1->4的边使得S,T联通
为了防止这条边被割,我们把这条边的容量变为inf即可
那么我们可以给每条边连一条反向的容量为inf的边
因为最小割是所有正向割边的权值和,所以就算加边时加入了反向边,这种边被割了也不会对答案造成影响。
由于容量为inf,所以只会在其他方案都不成立时割这条边,那么答案若大于inf就输出-1
你以为完了???
再来看这个图
显然答案为2,只要割掉S->T就行了
但用上面的方法跑出来是7
为什么?
仔细一想,反向边虽然不影响答案,但会使得有些一开始不存在的S->T的路径存在,如S->1->T
那么一开始先把图连好,把S不能到的点标记了,再往网络流里加边。
因为到不了,所以跟到不了的点连的边自然也不用加入网络流了
于是你就A掉了此题
代码如下
1 |
|
v1.5.2